<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /* 
        
         数组常用方法4 
         // push pop unshift shift reverse sort splice 
         // concat  slice join indexOf lastIndexOf
         // 上面12个是es4及以前的

        // 下面八个是es5新增  
      13. forEach()
        + 语法: 数组.forEach( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 遍历数组
        + 返回值: 没有(undefined)


      14. map()
        + 语法: 数组.map( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 映射数组
        + 返回值: 和原始数组长度一样的数组, 只不过内部数据经过映射加工
        + 注意: 映射条件以 return 的形式书写


      15. filter()
        + 语法: 数组.filter( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 过滤数组
        + 返回值: 必然是一个新数组, 内部存储的是原始数组内过滤出来的部分数据
        + 注意: 过滤条件以 return 的形式书写


      16. find()
        + 语法: 数组.find( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 在原始数组内查找满足条件的第一项
        + 返回值: 找到的数据
        + 注意: 查找条件以 return 的形式书写


      17. findIndex()
        + 语法: 数组.findIndex( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 在原始数组内查找满足条件的第一项的索引
        + 返回值: 找到的数据的索引
        + 注意: 查找条件以 return 的形式书写


      18. every()
        + 语法: 数组.every( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 判断数组内是否每一个都满足条件
        + 返回值: 一个布尔值
          => true, 说明数组内每一个数据都满足条件
          => false, 说明数组内至少有一个是不满足条件的
        + 注意: 判断条件以 return 的形式书写


      19. some()
        + 语法: 数组.some( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 判断数组内是否有某一个满足条件
        + 返回值: 一个布尔值
          => true, 说明数组内至少有某一个是满足条件的
          => false, 说明数组内所有的项都不满足条件
        + 注意: 判断条件以 return 的形式书写


      20. reduce()
        + 语法: 数组.reduce(function (prev, item, index, origin) {}, init)
          => prev: 表示初始值或者上一次的运算结果
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 用来实现叠加效果
        + 返回值: 最终叠加结果
        + 注意: 叠加条件以 return 的形式书写
        + 注意: prev 的值, 如果你传递了 init, 就是 init 的值, 如果你没有传递 init, 那么就是数组 [0] 的值
        + 注意: 如果你传递了 init, 循环执行 length 次, 如果你没有传递 init, 循环执行 length - 1 次, 少的是第一次
        
        
        
        
        
        
        
        
        */

       //重点  
       var arrs = [1,2,3,3,4,4,3,5,6,7,4,5];
       arrs.forEach(function(item,index,origin){
            console.log('数组的每个元素',item);
       });

       console.log('===================')
       var arrs = [1,2,3,3,4,4,3,5,6,7,4,5];
       arrs.forEach(function(item,index,origin){
            console.log('数组的元素的索引',index);
       });

       console.log('===================')
       var arrs = [1,2,3,3,4,4,3,5,6,7,4,5];
       arrs.forEach(function(item,index,origin){
            console.log('原始数组',origin);
       });

       // 上面三个参数 item必须写  index  origin 可写可不写  
       // 如果用不到  不写   用到 就写上  
       

       // item,index,origin  名字可以写成 a,b,c
       // 不管写什么名字  第一个是元素  第二个是索引 第三个是原始数组  
       // 建议就用 item,index,origin 


       

    </script>
</body>
</html>